//============================================================================================
/**
 * @file	nuts.c
 * @brief	木の実データ処理
 * @author	Hiroyuki Nakamura
 * @date	06.01.27
 */
//============================================================================================
#include "common.h"
#include "system/arc_tool.h"
#include "system/msgdata.h"
#include "msgdata\msg.naix"
#include "msgdata\msg_nuts_name.h"
#include "msgdata\msg_nuts_info.h"

#include "itemtool/item.h"
#include "nuts.h"
#include "itemtool/nuts_data.naix"

//============================================================================================
//	定数定義
//============================================================================================
// 木の実データ
struct _NUTS_DATA {
	u16 size;				// 大きさ
	u8	hardness;			// 堅さ
	u8	magnification;		// 実の倍率

	u8	speed;				// 育つ速度
	u8	absorption;			// 根の吸収力
	u8	karai;				// 辛さ
	u8	sibui;				// 渋さ

	u8	amai;				// 甘さ
	u8	nigai;				// 苦さ
	u8	suppai;				// 酸っぱさ
	u8	umai;				// 旨さ
};


//--------------------------------------------------------------------------------------------
/**
 * 木の実データのハンドル取得
 *
 * @param	id		木の実番号
 * @param	heap	ヒープID
 *
 * @return	データハンドル
 */
//--------------------------------------------------------------------------------------------
ARCHANDLE * Nuts_DataHandleGet( u32 heap )
{
	return ArchiveDataHandleOpen( ARC_NUTSDATA, heap );
}

//--------------------------------------------------------------------------------------------
/**
 * 木の実データロード（ハンドル使用）
 *
 * @param	handle	データハンドル
 * @param	id		木の実番号
 * @param	heap	ヒープID
 *
 * @return	木の実データ
 */
//--------------------------------------------------------------------------------------------
NUTSDATA * Nuts_DataLoadHandle( ARCHANDLE * handle, u32 id, u32 heap )
{
	return ArchiveDataLoadAllocByHandle( handle, NARC_nuts_data_nuts001_dat+id, heap );
}

//--------------------------------------------------------------------------------------------
/**
 * 木の実データハンドルを閉じる
 *
 * @param	handle	データハンドル
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
void Nuts_DataHandleClose( ARCHANDLE * handle )
{
	ArchiveDataHandleClose( handle );
}

//--------------------------------------------------------------------------------------------
/**
 * 木の実データロード
 *
 * @param	id		木の実番号
 * @param	heap	ヒープID
 *
 * @return	木の実データ
 */
//--------------------------------------------------------------------------------------------
NUTSDATA * Nuts_DataLoad( u32 id, u32 heap )
{
	return ArchiveDataLoadMalloc( ARC_NUTSDATA, NARC_nuts_data_nuts001_dat+id, heap );
}

//--------------------------------------------------------------------------------------------
/**
 * 木の実データロード（アイテム番号から）
 *
 * @param	item	アイテム番号
 * @param	heap	ヒープID
 *
 * @return	木の実データ
 */
//--------------------------------------------------------------------------------------------
NUTSDATA * Nuts_DataLoadItem( u32 item, u32 heap )
{
	return Nuts_DataLoad( item-NUTS_START_ITEMNUM, heap );
}

//--------------------------------------------------------------------------------------------
/**
 * 木の実パラメータ取得
 *
 * @param	dat		木の実データ
 * @param	prm		取得パラメータID
 *
 * @return	取得パラメータ
 */
//--------------------------------------------------------------------------------------------
u32 Nuts_ParamGet( NUTSDATA * dat, u32 prm )
{
	switch( prm ){
	case NUTS_PRM_SIZE:				// 大きさ
		return dat->size;
	case NUTS_PRM_HARDNESS:			// 堅さ
		return dat->hardness;
	case NUTS_PRM_MAGNIFICATION:	// 実の倍率
		return dat->magnification;
	case NUTS_PRM_SPEED:			// 育つ速度
		return dat->speed;
	case NUTS_PRM_ABSORPTION:		// 根の吸収力
		return dat->absorption;
	case NUTS_PRM_KARAI:			// 辛さ
		return dat->karai;
	case NUTS_PRM_SIBUI:			// 渋さ
		return dat->sibui;
	case NUTS_PRM_AMAI:				// 甘さ
		return dat->amai;
	case NUTS_PRM_NIGAI:			// 苦さ
		return dat->nigai;
	case NUTS_PRM_SUPPAI:			// 酸っぱさ
		return dat->suppai;
	case NUTS_PRM_UMAI:				// 旨さ
		return dat->umai;
	}
	return 0;
}

//----------------------------------------------------------
/**
 * @brief	きのみID→アイテムナンバーに変換
 */
//----------------------------------------------------------
u16 SeedSys_Nuts2Item(int type)
{
	if (type == 0) {
		return 0;
	}
	return type + NUTS_START_ITEMNUM - 1;
}
//----------------------------------------------------------
/**
 * @brief	アイテムナンバー→きのみIDへの変換
 */
//----------------------------------------------------------
u16 SeedSys_Item2Nuts(int itemno)
{
	if (itemno == 0) {
		return 0;
	}
	return itemno - NUTS_START_ITEMNUM + 1;
}
//----------------------------------------------------------
/**
 * @brief	コヤシ指定→アイテムナンバーへの変換
 */
//----------------------------------------------------------
u16 SeedSys_Compost2Item(SEEDCOMPOST compost)
{
	if (compost == 0) {
		return 0;
	}
	return compost + COMPOST_START_ITEMNUM - 1;
}
//----------------------------------------------------------
/**
 * @brief	アイテムナンバー→コヤシ指定への変換
 */
//----------------------------------------------------------
SEEDCOMPOST SeedSys_Item2Compost(int itemno)
{
	if (itemno == 0) {
		return 0;
	}
	return itemno - COMPOST_START_ITEMNUM + 1;
}

//----------------------------------------------------------
/**
 * @brief	現在手持ちにある木の実の総数を取得
 *
 * @param	item_sv	手持ちアイテムセーブデータポインタ
 * @param	heapID ワーク取得に利用するヒープID
 */
//----------------------------------------------------------
u16 SeedSys_GetItemNutsNumAll(MYITEM* item_sv,int heapID)
{
	int i;
	u16 num = 0;

	for(i = 0;i < ITEM_NUTS_MAX;i++){
		num += MyItem_GetItemNum( item_sv, NUTS_START_ITEMNUM + i , heapID);
	}
	return num;
}

//----------------------------------------------------------
/**
 * @brief	現在手持ちにあるこやしの総数を取得
 *
 * @param	item_sv	手持ちアイテムセーブデータポインタ
 * @param	heapID ワーク取得に利用するヒープID
 */
//----------------------------------------------------------
u16 SeedSys_GetItemCompostNumAll(MYITEM* item_sv,int heapID)
{
	int i;
	u16 num = 0;

	for(i = 0;i < ITEM_COMPOST_MAX;i++){
		num += MyItem_GetItemNum( item_sv, COMPOST_START_ITEMNUM + i, heapID );
	}
	return num;
}

